Skip to main content

CNC 示例 16:探测功能(清除剩余距离)(G31)

参见 CNC16_G31.project 的安装目录中的示例项目 CODESYS 下面 ..\CODESYS SoftMotion\Examples

该示例项目显示了如何使用探测功能(清除剩余距离)。

在示例中,机器沿 X 方向移动,直到到达光障 X=50。一旦到达光障,机器就必须停止。剩余的 G 代码必须从该位置开始处理

应用程序的结构

该结构是数控应用的典型结构。G 代码在后台任务中读取PathTask)。此任务中还完成了路径预处理。插值是在总线任务中执行的 (MainTask)。

使用以下 G 代码。在方块中 N10,可以进行快速定位 X = 20。然后,使用 G31(探测功能:清除剩余路径)进行移动 X = 100。最后,在方块中 N30,进行线性运动的作用是 X = 20, Y = 50

N10 G0 X20 F100 E1000 E-1000
N20 G31 X100
N30 G1 X20 Y50

插值器和解释器之间的交互对于探测功能(清除剩余路径)尤其重要。

  1. 解释器解码 G 代码并从中生成一条直线 X=20X=100 用于区块 N20。然后它停止解码。

  2. 插值器执行线性运动,同时输出探头数作为输出 udiActProbe。对于 G31,样本数始终为 1

  3. 在应用程序中,插值器使用以下命令停止 bQuick_Stop 一旦驱动器超出位置 X=50。(这模拟了光障。

    _sm_img_example_cnc16_1.png
  4. 在总线任务中, SMC_SetInterpreterStartPosition 功能块用于连续复制机器的当前位置。

    _sm_img_example_cnc16_2.png
  5. PathTask,则将起始位置分配给输入 SMC_NCInterpreter.piStartPosition:

    inter(
        sentences:= read.sentences,
        bExecute:= read.bExecute,
        nSizeOutQueue:= SIZEOF(bufIpo),
        pbyBufferOutQueue:= ADR(bufIpo),
        piStartPosition:= Main.setStart.StartPos);
  6. 插值器一停止, bAcknProbe 输入用于确认 G31 命令。在实际应用中,此时还应检查轴是否已实际到达停止位置。这个 smc_inPosition 可以使用功能块来执行此操作。

    _sm_img_example_cnc16_4.png
  7. 这会导致解释器恢复解码,但更新了起始位置,因此以下内容会阻塞 N30 是从位置开始的 X=55.5

下图说明了这些步骤。括号中的数字是指上述过程中的相应步骤。

_sm_img_example_cnc16_5.png

调试

  1. 生成应用程序并将其下载到控制器。

  2. 打开跟踪记录并将其下载到控制器。

  3. 启动应用程序并打开可视化。